//
//  DataBaseHandler.m
//  cityCar
//
//  Created by yao on 14-11-5.
//  Copyright (c) 2014年 lanou3g.com 蓝鸥科技. All rights reserved.
//

#import "DataBaseHandler.h"

@implementation DataBaseHandler

// 单例产生的对象，永远不要释放它，一个完整的单例实现会重写release，autorelease方法，使其无效。
+ (DataBaseHandler *)shareInstrance
{
    // 当程序第一次调用这个方法，会创建一个静态的指针
    static DataBaseHandler *handler = nil;
    
    // 当指针指向为空时，创建一个新的对象
    if (handler == nil) {
        handler = [[DataBaseHandler alloc] init];
        // 打开数据库
        [handler openDB];
    }
    
    // 把对象返回
    return handler;
}

- (void)openDB
{
    // 打开数据库
    
    
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    
    NSString *dataBasePath = [docPath stringByAppendingPathComponent:@"dataBase.db"];
    NSLog(@"%@", dataBasePath);
    // 如果路径下有文件，就直接用数据库指针指向它； 如果没有就创建一个文件。
    // 参数1：数据库文件的路径
    // 参数2：数据库智指针的地址
    int result = sqlite3_open([dataBasePath UTF8String], &dbPoint);
    
    NSLog(@"打开数据库结果: %d", result);
    
    if (result == SQLITE_OK) {
        NSLog(@"打开数据库成功");
    }
    
}

- (void)createTableModel
{
    // 创建表
    
    NSString *sql = [NSString stringWithFormat:@"create table model (name text, id text primary key)"];
    
    // 执行sql语句，对本地数据库做相应的处理
    // 参数1，数据库指针
    // 参数2，要执行的sql语句
    // 参数3，回调的函数指针
    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"创建表成功");
    } else {
        NSLog(@"错误编号: %d", result);
    }
    
}

- (void)insertModel:(ForumGather *)model
{
    NSString *sql = [NSString stringWithFormat:@"insert into model values('%@', '%@')", model.name, model.Id];
    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"添加信息成功");
    } else {
        NSLog(@"错误编号:%d", result);
    }
    
}

- (void)deleteModel:(NSString *)model
{
    NSString *sql = [NSString stringWithFormat:@"delete from model where id = %@", model];
    
    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    } else {
        NSLog(@"删除错误编号: %d", result);
    }
    
}

- (NSMutableArray *)selectModelAll
{
    // 创建一个可变数组，用来存储查询到的所有数据对象（student）
    NSMutableArray *arr = [NSMutableArray array];
    
    // 1.创建一个数据库的替身, 临时存储所有的对数据库的操作，防止直接访问数据库产生的数据风险
    sqlite3_stmt *stmt = nil;
    
    // 2.检查sql语句的写法
    NSString *sql = [NSString stringWithFormat:@"select *from model"];
    
    // 参数1：数据库的指针
    // 参数2：SQL语句
    // 参数3：限制sql语句的长度（-1的时候表示不限制）
    // 参数4：替身
    
    // 作用：检查sql语句的正确性，将stmt指针指向数据库文件，作为替身，临时存储所有对数据库的操作
    int result = sqlite3_prepare_v2(dbPoint, [sql UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        
        //如果sql语句检查无误，开始执行查询，检索数据库的数据
        
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            
            // 从替身中取得每一行数据
            
            // 参数1：替身
            // 参数2：第几列
            const char *nameChar = (const char *)sqlite3_column_text(stmt, 0);
            NSString *name = [NSString stringWithUTF8String:nameChar];
            
            
            // 取得的值给student对象赋值
            ForumGather *forum = [[ForumGather alloc] init];
            forum.name = name;
            forum.Id = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
            
            
            //            Student *stu = [[Student alloc] init];
            //            stu.name = name;
            //            stu.sex = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
            //            stu.number = sqlite3_column_int(stmt, 2);
            
            // 将创建好的学生对象添加到数组中
            [arr addObject:forum];
            [forum release];
        }
    }
    
    // 将替身中的所有操作，写入本地数据库，销毁替身
    sqlite3_finalize(stmt);
    
    return arr;
}

/// 创建web表************************************
- (void)createTableWeb
{
    // 创建表
    
    NSString *sql = [NSString stringWithFormat:@"create table webView (name text, image text, id text primary key, url text)"];
    
    // 执行sql语句，对本地数据库做相应的处理
    // 参数1，数据库指针
    // 参数2，要执行的sql语句
    // 参数3，回调的函数指针
    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"创建表成功");
    } else {
        NSLog(@"创建表错误编号: %d", result);
    }
    
}

- (void)insertWeb:(ForumGather *)web
{
    NSString *sql = [NSString stringWithFormat:@"insert into webView values('%@', '%@', '%@', '%@')", web.name, web.image, web.Id, web.url];
    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"添加信息成功");
    } else {
        NSLog(@"错误编号:%d", result);
    }
    
}

- (void)deleteWeb:(NSString *)web
{
    NSString *sql = [NSString stringWithFormat:@"delete from webView where id = %@", web];
    
    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    } else {
        NSLog(@"删除错误编号: %d", result);
    }
    
}

- (NSMutableArray *)selectWebAll
{
    // 创建一个可变数组，用来存储查询到的所有数据对象（student）
    NSMutableArray *arr = [NSMutableArray array];
    
    // 1.创建一个数据库的替身, 临时存储所有的对数据库的操作，防止直接访问数据库产生的数据风险
    sqlite3_stmt *stmt = nil;
    
    // 2.检查sql语句的写法
    NSString *sql = [NSString stringWithFormat:@"select *from webView"];
    
    // 参数1：数据库的指针
    // 参数2：SQL语句
    // 参数3：限制sql语句的长度（-1的时候表示不限制）
    // 参数4：替身
    
    // 作用：检查sql语句的正确性，将stmt指针指向数据库文件，作为替身，临时存储所有对数据库的操作
    int result = sqlite3_prepare_v2(dbPoint, [sql UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        
        //如果sql语句检查无误，开始执行查询，检索数据库的数据
        
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            
            // 从替身中取得每一行数据
            
            // 参数1：替身
            // 参数2：第几列
            const char *nameChar = (const char *)sqlite3_column_text(stmt, 0);
            NSString *name = [NSString stringWithUTF8String:nameChar];
            
            
            // 取得的值给student对象赋值
            ForumGather *forum = [[ForumGather alloc] init];
            forum.name = name;
            forum.image = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
            forum.Id = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
            forum.url = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)];
            
            // 将创建好的学生对象添加到数组中
            [arr addObject:forum];
            [forum release];
        }
    }
    
    // 将替身中的所有操作，写入本地数据库，销毁替身
    sqlite3_finalize(stmt);
    
    return arr;
}







@end
